package kmp;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个只包含数字的字符串 s ，用以表示一个 IP 地址，返回所有可能从 s 获得的 有效 IP 地址 。你可以按 任何 顺序返回答案。
 *
 * 有效 IP 地址 正好由四个整数（每个整数位于 0 到 255 之间组成，且不能含有前导 0），整数之间用 '.' 分隔。
 *
 * 例如："0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址，但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
 *
 */
public class leetCode93_restoreIpAddresses {
    List<String> ans = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
       if(s == null || s.length() == 0) return ans;
       List<String> trace = new ArrayList<>();
       build(s,0,trace);
       return ans;
    }

    public void build(String s,int pos,List<String> trace){
        if(trace.size() == 4 && pos == s.length()){
            String join = String.join(".", trace);
            ans.add(join);
            return;
        }
        for (int i = 1; i < 4; i++) {
            if(pos + i > s.length()) break;
            String a = s.substring(pos,pos + i);
            if(a.length() > 1 && a.startsWith("0")){
                break;
            }
            if(a.length() == 3 && Integer.parseInt(a) > 255){
                continue;
            }
            trace.add(a);
            build(s,pos + i,trace);
            trace.remove(trace.size() - 1);
        }

    }
}
